/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"99324353-B553-401F-9B0D-37CFA54DA406",variableType:4}
 */
var fNroManual = 0;

/**
 * @properties={typeid:24,uuid:"170EB255-49DB-42A7-A9CF-5C5044291A3C"}
 */
function iniciar() 
{
	databaseManager.setAutoSave(false);
	controller.newRecord();
	fecha			= application.getServerTimeStamp();
	letra			= globals.zconf_letra_remito;
	flete			= 0;
	retira			= 1
	deposito		= globals.zparam_deposito_default

	fNroManual = 0
	elements.fld_nro_manual.visible = globals.zparam_fact_nro_manual
	esconderErrores()
	forms.remitos_entrega.elements.grp_flete.enabled = false
	
	return true;
}

/**
 * @properties={typeid:24,uuid:"197DB06E-5641-4024-9453-3C11B2479A1A"}
 * @AllowToRunInFind
 */
function confirmar() 
{
	//  VALIDACION
	esconderErrores()
	var $error = 0
	// VALIDACIONES
	if (!cliente_id)
	{
		elements.lbl_error_cliente.visible = true
		$error = 1
	}
	if (!fecha)
	{
		elements.lbl_error_fecha.visible = true
		$error = 1
	}
	if (!deposito)
	{
		elements.lbl_error_deposito.visible = true
		$error = 1
	}
	if (fNroManual && !nro_remito)
	{
		elements.lbl_error_nro_remito.visible = true
		$error = 1
	}
	
	//  ELIMINA RENGLONES EN BLANCO
	var i = 1;
	while (i <= rem_cabecera_to_rem_detalle.getSize())
	{
		var $dtl = rem_cabecera_to_rem_detalle.getRecord(i)
		$dtl.msj_error = ''
		if (!$dtl.producto_id)
		{
			rem_cabecera_to_rem_detalle.deleteRecord(i);
		}
		else
		{
			if (!$dtl.cantidad)
			{
				$dtl.msj_error = 'Cantidad'
				$error = 1
			}
			else
			{
				if ($dtl.ped_detalle_id)
					$dtl.rem_detalle_to_ped_detalle.cantidad_pendiente_entrega -= $dtl.cantidad
			}
			i++
		}
	} 
	if (rem_cabecera_to_rem_detalle.getSize() == 0)
	{
		elements.lbl_error_productos.visible = true
		$error = 1
	}
	if ($error)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Por favor, complete todos los campos obligatorios','OK')
		return false
	}
	
	//DOMICILIO INGRESADO
	// GRABA DOMICILIO INGRESADO
	if (cli_domicilios_id == null)
	{   
		if (entrega_entre_calles==null && entrega_descripcion==null && entrega_localidad==null && entrega_lugar==null &&	entrega_observaciones==null &&  entrega_provincia_id==null && entrega_telefono==null )
		{ // no lleno domicilio
			if (retira == 0) //si no retira hay que entregarlo en alguna direccion
		 	{
				var resp = globals.DIALOGS.showQuestionDialog('Aviso', "El cliente no retira, ¿Informa Domicilio de Entrega ?", "Si" , "No");
				if (resp == "Si")
				{
					elements.tabs_150.tabIndex = 2;
					return false; 
				}
			}
		}
		else
		{ // graba
			if ( entrega_entre_calles && entrega_localidad && entrega_provincia_id && entrega_telefono && entrega_lugar)
			{
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.newRecord();
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.descripcion		= entrega_descripcion
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.entre_calles	= entrega_entre_calles;
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.localidad		= entrega_localidad;
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.calle			= entrega_lugar;
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.provincia_id	= entrega_provincia_id;
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.telefonos		= entrega_telefono;
				rem_cabecera_to_clientes.clientes_to_cli_domicilios.observaciones	= entrega_observaciones;
			}
			else
			{
				globals.DIALOGS.showWarningDialog('Aviso','Por favor complete la dirección de entrega','OK')
				elements.tabs_150.tabIndex = 2;
				return false
			}
		}
	}
	
	tipo 		= globals.zconf_numeracion_remito
	rem_estado 	= globals.zconf_rem_ingresado;
	
	if (ped_cabecera_id != null) // si viene de pedido
	{
		rem_cabecera_to_ped_cabecera.ped_estado = globals.zconf_ped_remitido; 
	}
	
	var $nro_aux
    if (fNroManual == 0)   //no es manual
    {
		// NUMERACION
		/** @type {JSFoundSet<db:/infocom/numeracion_cl>}*/
		var fs_nro_rem = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_cl')
		fs_nro_rem.find()
		fs_nro_rem.sucursal			= sucursal
		fs_nro_rem.letra			= letra
		fs_nro_rem.cod_comprobante	= globals.zconf_numeracion_remito;  // ex 14 06/09/2011
		var found = fs_nro_rem.search()
		if (found != 1)
	    {
		   globals.DIALOGS.showWarningDialog('Aviso','Sucursal o Letra o Tipo de comprobante incorrectos','OK');
		   return false;  
	    }
		$nro_aux = fs_nro_rem.ultimo_numero + 1
    }
    else
    {
    	$nro_aux = nro_remito
    }
	
    if (globals.remitos_duplicacion(letra,sucursal,$nro_aux) != 0)
    {
    	globals.DIALOGS.showWarningDialog('Aviso','El remito ya existe. Modifique el número del mismo','OK');
    	return false;
    }
    
	var $cant = rem_cabecera_to_rem_detalle.getSize()
	for (i = 1 ; i <= $cant ; i++)
	{
		$dtl = rem_cabecera_to_rem_detalle.getRecord(i)
		if ($dtl.fac_detalle_id)
			$dtl.rem_detalle_to_fac_detalle_rem_id.pendiente_entrega -= $dtl.cantidad
		globals.gRemitosStock(foundset.getRecord(foundset.getSelectedIndex()), $dtl, $nro_aux)
	}
	
    if (fNroManual == 0)
    {
    	fs_nro_rem.ultimo_numero += 1
		nro_remito = fs_nro_rem.ultimo_numero;
    }

    databaseManager.startTransaction()
	var estado_save = databaseManager.saveData()
	if (estado_save == true)
	{
		if (databaseManager.commitTransaction())
		{
			var $msj = 'Remito ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_remito,'00000000') +  '\nGenerado correctamente';
			globals.DIALOGS.showQuestionDialog('Aviso',  $msj, "OK");
			var $params = {
				pRemitoId		: rem_cabecera_id,
				pRazonSocial 	: usuarios_to_uservs.razon_social,
				pDireccion		: usuarios_to_uservs.calle_nro,
				pCodPostal		: usuarios_to_uservs.cod_postal,
				pCuit			: usuarios_to_uservs.cuit,
				pCodBrutos		: usuarios_to_uservs.cod_ing_brutos,
				pIva			: usuarios_to_uservs.uservs_to_tipo_iva.tipo_iva_desc,
				pActividad		: usuarios_to_uservs.actividad,
				pTelefono		: usuarios_to_uservs.telefono,
				pEmail			: usuarios_to_uservs.email,
				pInicioActividad : usuarios_to_uservs.inicio_actividad,
				pIconoURL		: usuarios_to_uservs.url_logo,
				pPie			: usuarios_to_uservs.pie_factura	
			}
			globals.metodoJasper('impresion', 'ventas/remitos.jasper', 'Remito_' + nro_remito, 'infocom', $params)
			iniciar()
		}
		else
		{
			databaseManager.rollbackTransaction()
			databaseManager.revertEditedRecords()
			globals.DIALOGS.showWarningDialog('Aviso','No pudo guardarse por un error en la base de datos','OK')
			iniciar()
		}
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso', ' Remito No fue generado - Revise los datos ingresados',  "OK")
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"B9D3EC6F-C1F3-4832-A3FF-A14068ADC5DA"}
 */
function esconderErrores()
{
	elements.lbl_error_cliente.visible 			= false
	elements.lbl_error_deposito.visible 		= false
	elements.lbl_error_fecha.visible 			= false
	elements.lbl_error_productos.visible 		= false
	elements.lbl_error_nro_remito.visible		= false
}

/**
 * Handle hide window.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"BB692B01-074F-4FA7-895A-6EEF3B76BBCD"}
 */
function salir(event) 
{
	if (cliente_id != null)
	{
		return globals.gOnHide(event)			
	}
	databaseManager.revertEditedRecords()
	databaseManager.setAutoSave(true)
	return true
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"307ACC76-C7FF-43E7-AD6D-D539E02F7F37"}
 */
function agregar_renglon(event)
{
	if (cliente_id != null)
	{
		rem_cabecera_to_rem_detalle.newRecord(false);
		forms.remitos_1.elements.fld_producto_id.requestFocus()
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente primero','OK');
	}
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"8DB68BCB-AE1D-4C0D-8DC4-1CB2908067D7"}
 */
function eliminar_renglon(event) 
{
	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja el renglon? ',  'Si', 'No')
	if (resp == 'Si')
	{
		rem_cabecera_to_rem_detalle.deleteRecord()
	}
}

/**
 * @properties={typeid:24,uuid:"91C2B3CE-A245-4254-B5C9-CFB91A536008"}
 */
function cancelar() 
{
	databaseManager.revertEditedRecords();
	iniciar();
}

/**
 * Handle changed data.
 *
 * @param {Object} oldValue old value
 * @param {Object} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"798074A7-DAD1-4C05-A77C-9B45B9227FC0"}
 */
function onDataChange_cliente_id(oldValue, newValue, event) 
{
	globals.gCliente = cliente_id;  
	
	databaseManager.revertEditedRecords()
	iniciar()
	cliente_id = globals.gCliente
	
	if (rem_cabecera_to_clientes.bloqueado == 1)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Cliente bloqueado - No se puede hacer remito','OK');
		return false;
	}
	if (rem_cabecera_to_rem_detalle.getSize() == 0)
		rem_cabecera_to_rem_detalle.newRecord()
	forms.remitos_1.elements.fld_producto_id.requestFocus()

	return true
}

/**
 * @param {JSRecord<db:/infocom/rem_detalle>} $reg
 * 
 * @properties={typeid:24,uuid:"7C2C0B77-8580-420B-8CD9-D138D72F7473"}
 */
function alta_hist_stock($reg) 
{
	//  CREA HISTORICO de STOCK
	var fs_hist = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'hist_stock')

	fs_hist.newRecord();
	fs_hist.cantidad			= $reg.cantidad;
	fs_hist.cliente_id			= cliente_id;
	fs_hist.producto_id			= $reg.producto_id;
	fs_hist.fecha				= fecha;
	fs_hist.tipo				= globals.zconf_hist_egre_cliente;  //2=egreso cliente
	fs_hist.cantidad_signo		= $reg.cantidad * (-1); // grabar con signo=NO hacer calculation
	fs_hist.deposito_id			= deposito;
	fs_hist.moneda_id			= globals.zparam_moneda_default;
	fs_hist.comprob_tipo		= globals.zconf_numeracion_remito; 
	fs_hist.comprob_sucursal 	= sucursal;
	fs_hist.comprob_nro			= nro_remito;
	fs_hist.comprob_letra		= letra;
}

/**
 * Callback method when the user changes tab in a tab panel or divider position in split pane.
 *
 * @param {Number} previousIndex index of tab shown before the change
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"82CE8739-4386-458F-88EA-395B16C50D82"}
 */
function onTabChange(previousIndex, event) {
	if(elements.tabs_150.tabIndex == 2)
	{
		elements.btn_agregar.visible = false
		elements.btn_eliminar.visible = false
	}
	else
	{
		elements.btn_agregar.visible = true
		elements.btn_eliminar.visible = true
	}
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"C5AAE4BA-034E-49CA-BD55-00BFD05B67F9"}
 */
function onDataChangeNroManual(oldValue, newValue, event) {
	elements.fld_nro_remito.editable = newValue
	elements.fld_nro_remito.requestFocus()
	return true
}

/**
 * @properties={typeid:24,uuid:"774964CF-C32E-46FD-9DFE-09319B4801F7"}
 */
function buscar_pedidos() 
{
	if (cliente_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente antes de buscar','OK');
		return;
	}

	globals.formEnVentana('rem_pedidos_cab','buscar_pedidos','Pedidos')
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"F1A36CE3-7A2D-4671-9B58-766EA32000A6"}
 */
function buscar_facturas(event) {
	if (cliente_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente antes de buscar','OK');
		return;
	}

	globals.formEnVentana('rem_facturas_cab','ver_factura','Facturas')
}
